package vistas;

import helper.DateStringConverter;

import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;

import modelo.Periodo;
import modelo.vista.TemporadaView;

import org.jdesktop.beansbinding.AutoBinding.UpdateStrategy;
import org.jdesktop.beansbinding.BeanProperty;
import org.jdesktop.swingbinding.JTableBinding;
import org.jdesktop.swingbinding.SwingBindings;

import controladores.AdministrateTemporadasControlador;
import java.awt.Color;

public class AdministrateTemporadasVista extends JPanel implements
		AbstractVista<AdministrateTemporadasControlador> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private AdministrateTemporadasControlador controlador;
	private JTable tblTemporadas;
	private JTextField txtInicio;
	private JTextField txtFin;
	
	public AdministrateTemporadasVista() {
		super();
		initComponents();
	}


	public AdministrateTemporadasVista(AdministrateTemporadasControlador controlador) {
		super();
		this.controlador = controlador;
		initComponents();
	}

	public AdministrateTemporadasControlador getControlador() {
		return controlador;
	}

	public void setControlador(AdministrateTemporadasControlador controlador) {
		this.controlador = controlador;
	}

	
	
	private void initComponents() {
		
		this.setLayout(null);
		
		tblTemporadas = new JTable();
		tblTemporadas.setBounds(24, 49, 743, 195);
		this.add(tblTemporadas);
		
		JLabel lblPeriodo = new JLabel("Per\u00EDodo");
		lblPeriodo.setFont(new Font("Tahoma", Font.PLAIN, 18));
		lblPeriodo.setBounds(262, 255, 82, 28);
		this.add(lblPeriodo);
		
		JLabel lblIniciommaaaa = new JLabel("Inicio (mm/aaaa):");
		lblIniciommaaaa.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblIniciommaaaa.setBounds(24, 290, 129, 14);
		this.add(lblIniciommaaaa);
		
		final JLabel lblMsjErrorTemporadasYaExisten = new JLabel("Temporadas ya existen con ese periodo");
		lblMsjErrorTemporadasYaExisten.setFont(new Font("Lucida Grande", Font.PLAIN, 14));
		lblMsjErrorTemporadasYaExisten.setForeground(Color.RED);
		lblMsjErrorTemporadasYaExisten.setBounds(481, 364, 303, 14);
		lblMsjErrorTemporadasYaExisten.setVisible(false);
		add(lblMsjErrorTemporadasYaExisten);
		
		txtInicio = new JTextField();
		txtInicio.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				lblMsjErrorTemporadasYaExisten.setVisible(false);
			}
		});
		txtInicio.setBounds(178, 289, 102, 20);
		this.add(txtInicio);
		txtInicio.setColumns(10);
		
		JLabel lblFin = new JLabel("Fin (mm/aaaa):");
		lblFin.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblFin.setBounds(316, 290, 108, 14);
		this.add(lblFin);
		
		txtFin = new JTextField();
		txtFin.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				lblMsjErrorTemporadasYaExisten.setVisible(false);
			}
		});
		txtFin.setBounds(447, 289, 102, 20);
		this.add(txtFin);
		txtFin.setColumns(10);
		
		JButton btnGenerarSiembras = new JButton("Generar siembras");
		btnGenerarSiembras.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String fechaInicio = txtInicio.getText();
				String fechaFin = txtFin.getText();
				if(fechaFin.equals("") || fechaInicio.equals("")){
					lblMsjErrorTemporadasYaExisten.setVisible(true);
				}else{
					DateStringConverter dsc = new DateStringConverter();
					Date inicio = dsc.convertReverse(fechaInicio);
					Date fin = dsc.convertReverse(fechaFin);
					try {
						if(!controlador.existenTemporadas(new Periodo(inicio, fin))){
							controlador.generarSiembras(new Periodo(inicio, fin));
						}else{
							lblMsjErrorTemporadasYaExisten.setVisible(true);
						}
					} catch (Exception e) {
						System.out.println(e.getMessage());
						e.printStackTrace();
					}
				}
				

			}
		});
		btnGenerarSiembras.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnGenerarSiembras.setBounds(559, 276, 208, 42);
		this.add(btnGenerarSiembras);
		
		JButton btnConfirmarTemporadas = new JButton("Confirmar temporadas");
		btnConfirmarTemporadas.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				controlador.confirmarSiembras();
			}
		});
		btnConfirmarTemporadas.setFont(new Font("Tahoma", Font.PLAIN, 16));
		btnConfirmarTemporadas.setBounds(206, 349, 263, 42);
		this.add(btnConfirmarTemporadas);
		this.setPreferredSize(new java.awt.Dimension(790, 413));
		
		JLabel lblNroTemporada = new JLabel("Nro. Temporada");
		lblNroTemporada.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblNroTemporada.setBounds(54, 25, 146, 14);
		add(lblNroTemporada);
		
		JLabel lblCereal = new JLabel("Cereal");
		lblCereal.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblCereal.setBounds(354, 24, 89, 14);
		add(lblCereal);
		
		JLabel lblCantiadCosechado = new JLabel("Cantiad cosechado");
		lblCantiadCosechado.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblCantiadCosechado.setBounds(584, 24, 146, 14);
		add(lblCantiadCosechado);
		
		initDataBindings();
		
	}
	protected void initDataBindings() {
		BeanProperty<AdministrateTemporadasControlador, List<TemporadaView>> administrateTemporadasControladorBeanProperty = BeanProperty.create("temporadasView");
		JTableBinding<TemporadaView, AdministrateTemporadasControlador, JTable> jTableBinding = SwingBindings.createJTableBinding(UpdateStrategy.READ, controlador, administrateTemporadasControladorBeanProperty, tblTemporadas, "jTableBinding");
		//
		BeanProperty<TemporadaView, Integer> temporadaViewBeanProperty = BeanProperty.create("codigo");
		jTableBinding.addColumnBinding(temporadaViewBeanProperty).setColumnName("C\u00F3digo").setEditable(false);
		//
		BeanProperty<TemporadaView, String> temporadaViewBeanProperty_1 = BeanProperty.create("cereal.nombre");
		jTableBinding.addColumnBinding(temporadaViewBeanProperty_1).setColumnName("Cereal").setEditable(false);
		//
		BeanProperty<TemporadaView, Float> temporadaViewBeanProperty_2 = BeanProperty.create("cosecha.cantidadCosechadoTotal");
		jTableBinding.addColumnBinding(temporadaViewBeanProperty_2).setColumnName("Cantidad cosechado").setEditable(false);
		//
		jTableBinding.setEditable(false);
		jTableBinding.bind();
	}
}
